// 解题思路：
// 从 0 下标开始跳跃，每次能跳 nums[i] 步，看能否跳到最后一个下标
// 贪心的策略：每次都要找一下这一步能跳到的范围，一直向后跳，能覆盖到最后一个下标，就能跳过去，反之不能
// 能跳过去和跳过去的次数最少都是能跳过去，只要能覆盖最后一个下标，就可以跳过去

public class Solution {
    public boolean canJump(int[] nums) {
        int n = nums.length;
        int left = 0; int right = 0; int maxPos = 0;

        while(left <= right){
            if(maxPos >= n - 1) return true;
            for(int i = left; i <= right; i++){
                maxPos = Math.max(maxPos, i + nums[i]);
            }
            left = right + 1;
            right = maxPos;
        }
        return false;
    }
}
